﻿//================================================
//
//                       _oo0oo_
//                      o8888888o
//                      88" . "88
//                      (| -_- |)
//                      0\  =  /0
//                    ___/`---'\___
//                  .' \\|     |// '.
//                 / \\|||  :  |||// \
//                / _||||| -:- |||||- \
//               |   | \\\  -  /// |   |
//               | \_|  ''\---/''  |_/ |
//               \  .-\__  '-'  ___/-. /
//             ___'. .'  /--.--\  `. .'___
//          ."" '<  `.___\_<|>_/___.' >' "".
//         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
//         \  \ `_.   \_ __\ /__ _/   .-` /  /
//     =====`-.____`.___ \_____/___.-`___.-'=====
//                       `=---='
//
//
//     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//               佛祖保佑         永无BUG
//
//
//
//================================================
//
// Created by Huiyi on 2021/4/20.
//
//@模块名称 易炫彩算法库
//@依赖   module_base.h
//@依赖   module_XExpand_String.h
//@版本   1.3
//@日期   2022-10-05
//@作者   Huiyi
//@模块备注 封装算法相关函数
//项目gitee地址 https://gitee.com/LoveA/XL_XExpand
//大部分代码已经历过粗略测试
//如发现BUG可提交issues
//https://gitee.com/LoveA/XL_XExpand/issues
//反馈QQ群:594165459

#pragma once

#ifndef XL_XEXPAND_ALGO_H
//@隐藏{
#define XL_XEXPAND_ALGO_H    //防止复用

#if XC_MOUDLE
#include "module_base.h"
#include "module_XExpand_String.h"

#endif
//@隐藏}
#include<algorithm>
//@src  "array.cpp"

// TODO: 数组算法
//@分组{  数组算法


//@返回   返回文本在数组内的位置,-1为不存在
//@别名   数组_寻找成员_文本(文本数组,被搜寻文本)
int X_Array_FindArrayMembers (CXVector<std::string> arr,const char *str);

//@备注   c++sort排序
//@参数   要排序的数组
//@参数   真为升序排序,假为降序,默认真
//@参数   区分大小写,默认真
//@别名   数组_排序_文本A(要排序的数组,升序排序,区分大小写)
void X_String_SortA(CXVector <CXTextA>& arr, bool asc=true, bool caseSensitive=true);
//@备注   c++sort排序
//@参数   要排序的数组
//@参数   真为升序排序,假为降序,默认真
//@参数   区分大小写,默认真
//@别名   数组_排序_文本(要排序的数组,升序排序,区分大小写)
void X_String_Sort(CXVector <CXText>& arr, bool asc = true, bool caseSensitive = true);

//@隐藏{
//template<typename T>
//void X_Array_ReverseArray(CXVector<T> &array);
template<typename T>
void X_Array_ReverseArray(CXVector<T>& arr)
{
    //第一项和最后一项互换；第二项与倒数第二项互换；第三项与倒数第三项互换；以此类推，直到换到中间。
    //时间复杂度是O（n），因为对于有n个元素的数组a，需要交换n/2次。
    //空间复杂度是O（1），因为只开辟了2个int的空间。
    T temp;
    int n = arr.size();
    for (int i = 0; i < n / 2; ++i) {
        temp = arr[n - i - 1];
        arr[n - i - 1] = arr[i];
        arr[i] = temp;
    }
};
//@隐藏}
/*@声明
//@参数   待反转数组
//@别名   数组_反转数组()
void X_Array_ReverseArray(...);
*/


//@分组}  数组算法



#endif //XL_XEXPAND_ALGO_H
